/**
 * Vue i18n loader
 * created by @musnow
 * https://github.com/musnow
 */
import Vue from 'vue'
import VueI18n from 'vue-i18n'
// default language
// change default accept-language
import { axios } from '@/utils/request'

import moment from 'moment'
import 'moment/locale/zh-cn'
import 'moment/locale/zh-tw'

Vue.use(VueI18n)

// TODO i18n 国际化: 默认语言
export const defaultLang = 'en-US'
moment.locale(defaultLang)

const i18n = new VueI18n({
  locale: defaultLang,
  fallbackLocale: defaultLang,
  silentTranslationWarn: true, // 没有的key值不发出警告
  missing (locale, code) { // 没有key值时应如何处理
    // console.log(`--> 在[${locale}]语言环境下,未找到编码为[${code}]的数据`)
    return ':' + code
  }
})

export default i18n

const loadedLanguages = []

// 从缓存設置中加载当前语言
// if (Vue.ls.get('lang') !== null && defaultLang !== Vue.ls.get('lang')) {
//   loadLanguageAsync(localStorage.lang)
// }

function setI18nLanguage (lang) {
  i18n.locale = lang
  axios.defaults.headers.common['Accept-Language'] = lang
  document.querySelector('html').setAttribute('lang', lang)
  return lang
}

export function loadLanguageAsync (lang = defaultLang) {
  return new Promise(resolve => {
    // 缓存语言设置
    Vue.ls.set('lang', lang)
    if (!loadedLanguages.includes(lang)) {
      // TODO i18n 国际化: 如果国际化资源来自后台, 此处需要改为使用axios从远程加载
      return import(/* webpackChunkName: "lang-[request]" */ `./lang/${lang}`).then(msg => {
        moment.locale(lang)
        i18n.setLocaleMessage(lang, msg.default)
        loadedLanguages.push(lang)
        return setI18nLanguage(lang)
      })
    }
    return resolve(setI18nLanguage(lang))
  })
}
